package com.apadog.study.wxpay;



import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAPublicKeyConfig;
import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig;
import com.wechat.pay.java.service.payments.h5.H5Service;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
import com.wechat.pay.java.service.refund.RefundService;
import lombok.Data;

@Data
public class WxPayConfig {

    private TxPayConfig dto;

    private Config config;

    public WxPayConfig(TxPayConfig dto){
        this.dto = dto;
        config = new RSAPublicKeyConfig.Builder()
                .merchantId(dto.getMchId())
                //.privateKeyFromPath(dto.getKeyPath())
                //.publicKeyFromPath(dto.getPublicKeyPath())
                .publicKey(dto.getPublicKeyPath())
                .privateKey(dto.getKeyPath())
                .publicKeyId(dto.getPublicKeyId())
                .merchantSerialNumber(dto.getMchSerialNo())
                .apiV3Key(dto.getApiKey())
                .build();
    }

    /**
     * JSAPI支付
     * 提供商户在微信客户端内部浏览器网页中使用微信支付收款的能力。（包含小程序）
     */
    public JsapiService jsapiService() {
        return new JsapiService.Builder()
                .config(config)
                .build();
    }



// ===== 回调验签 BUG 修复 START [By 满洲里有象] =====
    /**
     * RSAPublicKeyNotificationConfig 用于 回调通知的验签
     *
     */
    public NotificationConfig notificationConfig() {
        return new RSAPublicKeyNotificationConfig.Builder()
                //.publicKeyFromPath(dto.getPublicKeyPath())
                .publicKey(dto.getPublicKeyPath())
                .publicKeyId(dto.getPublicKeyId())
                .apiV3Key(dto.getApiKey())
                .build();
    }


    /**
     * 支付回调 解密
     */
    public NotificationParser notificationParser() {
        return new NotificationParser(this.notificationConfig());
    }
// ===== 回调验签 BUG 修复 END [By 满洲里有象] =====



    /**
     * H5支付
     * 提供商户在移动客户端浏览器网页（非微信客户端内部浏览器）中使用微信支付收款的能力。
     * 这里用不到 但是也写出来了。
     */
    public H5Service h5Service() {
        return new H5Service.Builder()
                .config(config)
                .build();
    }


    /**
     * Native 支付
     * 提供商户在PC端网页浏览器中使用微信支付收款的能力。
     * 这里用不到 但是也写出来了。
     */
    public NativePayService nativePayService() {
        return new NativePayService.Builder()
                .config(config)
                .build();
    }

    /**
     * 申请退款
     */
    public RefundService refundService(){
        return new RefundService.Builder()
                .config(config)
                .build();
    }



}
